package cn.gwm.flink.streaming.beans.termalRunaway;

import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;

/**
 * 热失控数据处理临时类
 *
 * @author GW00283474
 */
@Data
@Slf4j
public class WaringTermalWithStragegyAndFlagEv extends WaringTermalDwmWithStragegyEv implements Serializable {
    /**
     * 车辆代码
     */
    public String deviceId;

    /**
     * 时间序列ID
     */
    public Long item_time;

    /**
     * 电池热失控
     */
    public Integer BMS_BattHeatRunaway;
    /**
     * 电池模组1温度
     */
    public Integer BMS_BattModuleTemp1;
    /**
     * 电池模组10温度
     */
    public Integer BMS_BattModuleTemp10;
    /**
     * 电池模组11温度
     */
    public Integer BMS_BattModuleTemp11 ;
    /**
     * 电池模组12温度
     */
    public Integer BMS_BattModuleTemp12 ;
    /**
     * 电池模组13温度
     */
    public Integer BMS_BattModuleTemp13 ;
    /**
     * 电池模组14温度
     */
    public Integer BMS_BattModuleTemp14 ;
    /**
     * 电池模组15温度
     */
    public Integer BMS_BattModuleTemp15 ;
    /**
     * 电池模组16温度
     */
    public Integer BMS_BattModuleTemp16 ;
    /**
     * 电池模组17温度
     */
    public Integer BMS_BattModuleTemp17 ;
    /**
     * 电池模组18温度
     */
    public Integer BMS_BattModuleTemp18 ;
    /**
     * 电池模组19温度
     */
    public Integer BMS_BattModuleTemp19 ;
    /**
     * 电池模组2温度
     */
    public Integer BMS_BattModuleTemp2 ;
    /**
     * 电池模组20温度
     */
    public Integer BMS_BattModuleTemp20 ;
    /**
     * 电池模组21温度
     */
    public Integer BMS_BattModuleTemp21 ;
    /**
     * 电池模组22温度
     */
    public Integer BMS_BattModuleTemp22 ;
    /**
     * 电池模组23温度
     */
    public Integer BMS_BattModuleTemp23 ;
    /**
     * 电池模组24温度
     */
    public Integer BMS_BattModuleTemp24 ;
    /**
     * 电池模组25温度
     */
    public Integer BMS_BattModuleTemp25 ;
    /**
     * 电池模组26温度
     */
    public Integer BMS_BattModuleTemp26 ;
    /**
     * 电池模组27温度
     */
    public Integer BMS_BattModuleTemp27 ;
    /**
     * 电池模组28温度
     */
    public Integer BMS_BattModuleTemp28 ;
    /**
     * 电池模组29温度
     */
    public Integer BMS_BattModuleTemp29 ;
    /**
     * 电池模组3温度
     */
    public Integer BMS_BattModuleTemp3 ;
    /**
     * 电池模组30温度
     */
    public Integer BMS_BattModuleTemp30 ;
    /**
     * 电池模组4温度
     */
    public Integer BMS_BattModuleTemp4 ;
    /**
     * 电池模组5温度
     */
    public Integer BMS_BattModuleTemp5 ;
    /**
     * 电池模组6温度
     */
    public Integer BMS_BattModuleTemp6 ;
    /**
     * 电池模组7温度
     */
    public Integer BMS_BattModuleTemp7 ;
    /**
     * 电池模组8温度
     */
    public Integer BMS_BattModuleTemp8 ;
    /**
     * 电池模组9温度
     */
    public Integer BMS_BattModuleTemp9 ;

    /**
     * 最大模组温度
     */
    public Integer BMS_RMC_ModuleTempMax;
    /**
     * 最小模组温度
     */
    public Integer BMS_RMC_ModuleTempMin ;

    /**
     * 单体最大电压
     */
    public BigDecimal BMS_RMC_CellVoltMax;
    /**
     * 单体最小电压
     */
    public BigDecimal BMS_RMC_CellVoltMin;
    /**
     * 单体1电压
     */
    public BigDecimal BMS_SingleCellVolt1;
    /**
     * 单体10电压
     */
    public BigDecimal BMS_SingleCellVolt10;
    /**
     * 单体100电压
     */
    public BigDecimal BMS_SingleCellVolt100;
    /**
     * 单体101电压
     */
    public BigDecimal BMS_SingleCellVolt101;
    /**
     * 单体102电压
     */
    public BigDecimal BMS_SingleCellVolt102;
    /**
     * 单体103电压
     */
    public BigDecimal BMS_SingleCellVolt103;
    /**
     * 单体104电压
     */
    public BigDecimal BMS_SingleCellVolt104;
    /**
     * 单体105电压
     */
    public BigDecimal BMS_SingleCellVolt105;
    /**
     * 单体106电压
     */
    public BigDecimal BMS_SingleCellVolt106;
    /**
     * 单体107电压
     */
    public BigDecimal BMS_SingleCellVolt107;
    /**
     * 单体108电压
     */
    public BigDecimal BMS_SingleCellVolt108;
    /**
     * 单体109电压
     */
    public BigDecimal BMS_SingleCellVolt109;
    /**
     * 单体11电压
     */
    public BigDecimal BMS_SingleCellVolt11;
    /**
     * 单体110电压
     */
    public BigDecimal BMS_SingleCellVolt110;
    /**
     * 单体111电压
     */
    public BigDecimal BMS_SingleCellVolt111;
    /**
     * 单体112电压
     */
    public BigDecimal BMS_SingleCellVolt112;
    /**
     * 单体113电压
     */
    public BigDecimal BMS_SingleCellVolt113;
    /**
     * 单体114电压
     */
    public BigDecimal BMS_SingleCellVolt114;
    /**
     * 单体115电压
     */
    public BigDecimal BMS_SingleCellVolt115;
    /**
     * 单体116电压
     */
    public BigDecimal BMS_SingleCellVolt116;
    /**
     * 单体117电压
     */
    public BigDecimal BMS_SingleCellVolt117;
    /**
     * 单体118电压
     */
    public BigDecimal BMS_SingleCellVolt118;
    /**
     * 单体119电压
     */
    public BigDecimal BMS_SingleCellVolt119;

    /**
     * 单体120电压
     */
    public BigDecimal BMS_SingleCellVolt120;
    /**
     * 单体12电压
     */
    public BigDecimal BMS_SingleCellVolt12;
    /**
     * 单体13电压
     */
    public BigDecimal BMS_SingleCellVolt13;
    /**
     * 单体14电压
     */
    public BigDecimal BMS_SingleCellVolt14;
    /**
     * 单体15电压
     */
    public BigDecimal BMS_SingleCellVolt15;
    /**
     * 单体16电压
     */
    public BigDecimal BMS_SingleCellVolt16;
    /**
     * 单体17电压
     */
    public BigDecimal BMS_SingleCellVolt17;
    /**
     * 单体18电压
     */
    public BigDecimal BMS_SingleCellVolt18;
    /**
     * 单体19电压
     */
    public BigDecimal BMS_SingleCellVolt19;
    /**
     * 单体2电压
     */
    public BigDecimal BMS_SingleCellVolt2;
    /**
     * 单体20电压
     */
    public BigDecimal BMS_SingleCellVolt20;
    /**
     * 单体21电压
     */
    public BigDecimal BMS_SingleCellVolt21;
    /**
     * 单体22电压
     */
    public BigDecimal BMS_SingleCellVolt22;
    /**
     * 单体23电压
     */
    public BigDecimal BMS_SingleCellVolt23;
    /**
     * 单体24电压
     */
    public BigDecimal BMS_SingleCellVolt24;
    /**
     * 单体25电压
     */
    public BigDecimal BMS_SingleCellVolt25;
    /**
     * 单体26电压
     */
    public BigDecimal BMS_SingleCellVolt26;
    /**
     * 单体27电压
     */
    public BigDecimal BMS_SingleCellVolt27;
    /**
     * 单体28电压
     */
    public BigDecimal BMS_SingleCellVolt28;
    /**
     * 单体29电压
     */
    public BigDecimal BMS_SingleCellVolt29;
    /**
     * 单体3电压
     */
    public BigDecimal BMS_SingleCellVolt3;
    /**
     * 单体30电压
     */
    public BigDecimal BMS_SingleCellVolt30;
    /**
     * 单体31电压
     */
    public BigDecimal BMS_SingleCellVolt31;
    /**
     * 单体32电压
     */
    public BigDecimal BMS_SingleCellVolt32;
    /**
     * 单体33电压
     */
    public BigDecimal BMS_SingleCellVolt33;
    /**
     * 单体34电压
     */
    public BigDecimal BMS_SingleCellVolt34;
    /**
     * 单体35电压
     */
    public BigDecimal BMS_SingleCellVolt35;
    /**
     * 单体36电压
     */
    public BigDecimal BMS_SingleCellVolt36;
    /**
     * 单体37电压
     */
    public BigDecimal BMS_SingleCellVolt37;
    /**
     * 单体38电压
     */
    public BigDecimal BMS_SingleCellVolt38;
    /**
     * 单体39电压
     */
    public BigDecimal BMS_SingleCellVolt39;
    /**
     * 单体4电压
     */
    public BigDecimal BMS_SingleCellVolt4;
    /**
     * 单体40电压
     */
    public BigDecimal BMS_SingleCellVolt40;
    /**
     * 单体41电压
     */
    public BigDecimal BMS_SingleCellVolt41;
    /**
     * 单体42电压
     */
    public BigDecimal BMS_SingleCellVolt42;
    /**
     * 单体43电压
     */
    public BigDecimal BMS_SingleCellVolt43;
    /**
     * 单体44电压
     */
    public BigDecimal BMS_SingleCellVolt44;
    /**
     * 单体45电压
     */
    public BigDecimal BMS_SingleCellVolt45;
    /**
     * 单体46电压
     */
    public BigDecimal BMS_SingleCellVolt46;
    /**
     * 单体47电压
     */
    public BigDecimal BMS_SingleCellVolt47;
    /**
     * 单体48电压
     */
    public BigDecimal BMS_SingleCellVolt48;
    /**
     * 单体49电压
     */
    public BigDecimal BMS_SingleCellVolt49;
    /**
     * 单体5电压
     */
    public BigDecimal BMS_SingleCellVolt5;
    /**
     * 单体50电压
     */
    public BigDecimal BMS_SingleCellVolt50;
    /**
     * 单体51电压
     */
    public BigDecimal BMS_SingleCellVolt51;
    /**
     * 单体52电压
     */
    public BigDecimal BMS_SingleCellVolt52;
    /**
     * 单体53电压
     */
    public BigDecimal BMS_SingleCellVolt53;
    /**
     * 单体54电压
     */
    public BigDecimal BMS_SingleCellVolt54;
    /**
     * 单体55电压
     */
    public BigDecimal BMS_SingleCellVolt55;
    /**
     * 单体56电压
     */
    public BigDecimal BMS_SingleCellVolt56;
    /**
     * 单体57电压
     */
    public BigDecimal BMS_SingleCellVolt57;
    /**
     * 单体58电压
     */
    public BigDecimal BMS_SingleCellVolt58;
    /**
     * 单体59电压
     */
    public BigDecimal BMS_SingleCellVolt59;
    /**
     * 单体6电压
     */
    public BigDecimal BMS_SingleCellVolt6;
    /**
     * 单体60电压
     */
    public BigDecimal BMS_SingleCellVolt60;
    /**
     * 单体61电压
     */
    public BigDecimal BMS_SingleCellVolt61;
    /**
     * 单体62电压
     */
    public BigDecimal BMS_SingleCellVolt62;
    /**
     * 单体63电压
     */
    public BigDecimal BMS_SingleCellVolt63;
    /**
     * 单体64电压
     */
    public BigDecimal BMS_SingleCellVolt64;
    /**
     * 单体65电压
     */
    public BigDecimal BMS_SingleCellVolt65;
    /**
     * 单体66电压
     */
    public BigDecimal BMS_SingleCellVolt66;
    /**
     * 单体67电压
     */
    public BigDecimal BMS_SingleCellVolt67;
    /**
     * 单体68电压
     */
    public BigDecimal BMS_SingleCellVolt68;
    /**
     * 单体69电压
     */
    public BigDecimal BMS_SingleCellVolt69;
    /**
     * 单体7电压
     */
    public BigDecimal BMS_SingleCellVolt7;
    /**
     * 单体70电压
     */
    public BigDecimal BMS_SingleCellVolt70;
    /**
     * 单体71电压
     */
    public BigDecimal BMS_SingleCellVolt71;
    /**
     * 单体72电压
     */
    public BigDecimal BMS_SingleCellVolt72;
    /**
     * 单体73电压
     */
    public BigDecimal BMS_SingleCellVolt73;
    /**
     * 单体74电压
     */
    public BigDecimal BMS_SingleCellVolt74;
    /**
     * 单体75电压
     */
    public BigDecimal BMS_SingleCellVolt75;
    /**
     * 单体76电压
     */
    public BigDecimal BMS_SingleCellVolt76;
    /**
     * 单体77电压
     */
    public BigDecimal BMS_SingleCellVolt77;
    /**
     * 单体78电压
     */
    public BigDecimal BMS_SingleCellVolt78;
    /**
     * 单体79电压
     */
    public BigDecimal BMS_SingleCellVolt79;
    /**
     * 单体8电压
     */
    public BigDecimal BMS_SingleCellVolt8;
    /**
     * 单体80电压
     */
    public BigDecimal BMS_SingleCellVolt80;
    /**
     * 单体81电压
     */
    public BigDecimal BMS_SingleCellVolt81;
    /**
     * 单体82电压
     */
    public BigDecimal BMS_SingleCellVolt82;
    /**
     * 单体83电压
     */
    public BigDecimal BMS_SingleCellVolt83;
    /**
     * 单体84电压
     */
    public BigDecimal BMS_SingleCellVolt84;
    /**
     * 单体85电压
     */
    public BigDecimal BMS_SingleCellVolt85;
    /**
     * 单体86电压
     */
    public BigDecimal BMS_SingleCellVolt86;
    /**
     * 单体87电压
     */
    public BigDecimal BMS_SingleCellVolt87;
    /**
     * 单体88电压
     */
    public BigDecimal BMS_SingleCellVolt88;
    /**
     * 单体89电压
     */
    public BigDecimal BMS_SingleCellVolt89;
    /**
     * 单体9电压
     */
    public BigDecimal BMS_SingleCellVolt9;
    /**
     * 单体90电压
     */
    public BigDecimal BMS_SingleCellVolt90;
    /**
     * 单体91电压
     */
    public BigDecimal BMS_SingleCellVolt91;
    /**
     * 单体92电压
     */
    public BigDecimal BMS_SingleCellVolt92;
    /**
     * 单体93电压
     */
    public BigDecimal BMS_SingleCellVolt93;
    /**
     * 单体94电压
     */
    public BigDecimal BMS_SingleCellVolt94;
    /**
     * 单体95电压
     */
    public BigDecimal BMS_SingleCellVolt95;
    /**
     * 单体96电压
     */
    public BigDecimal BMS_SingleCellVolt96;
    /**
     * 单体97电压
     */
    public BigDecimal BMS_SingleCellVolt97;
    /**
     * 单体98电压
     */
    public BigDecimal BMS_SingleCellVolt98;
    /**
     * 单体99电压
     */
    public BigDecimal BMS_SingleCellVolt99;

    /**
     * SOC电量
     */
    public BigDecimal BMS_SOC;

    /**
     * 车辆类型
     */
    public String vehicletype;
    /**
     * 车型名称
     */
    public String modelname;

    /**
     * 摄入时间
     */
    public String ingestionTime;
    /**
     * 摄入日期
     */
    public String ingestionDate;

    /**
     * 异常类型
     */
    String exceptionType = "无";

    /**
     * 经度
     */
    BigDecimal longitude;
    /**
     * 纬度
     */
    BigDecimal latitude;

    /**
     * 车型配置吗
     */
    public String model_code;

    List<BmsTrdStrategys> bmsTrdStrategies= new ArrayList<>();
    /**
     * 满足温度校验异常标识
     */
    Boolean temperatureWarn = false;

    /**
     * 满足温差校验异常标识
     */
    Boolean temperatureDifferenceWarn = false;

    /**
     * 满足电压校验异常标识
     */
    Boolean voltageWarn = false;

    /**
     * 满足电压变化校验异常标识
     */
    Boolean voltageVariationWarn = false;

    /**
     * 满足温升校验异常标识
     */
    Boolean temperatureRiseWarn = false;

    /**
     * 满足车端上传热失控异常标识
     */
    Boolean termalRunawayWarn = false;

    /**
     * 获取属性的Map结构集合
     *
     * @return
     */
    @Override
    public JSONObject getPropertiesMap() {
        Map<String, Object> map = new HashMap<>(0);
        List removeProperties = new ArrayList<>();
        removeProperties.add("bmsTrdStrategies");
        removeProperties.add("temperatureRiseWarn");
        removeProperties.add("voltageVariationWarn");
        removeProperties.add("voltageWarn");
        removeProperties.add("temperatureDifferenceWarn");
        removeProperties.add("temperatureWarn");
        removeProperties.add("termalRunawayWarn");
        removeProperties.add("log");
        removeProperties.add("logger");
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            try {
                if (!removeProperties.contains(field.getName())) {
                    map.put(field.getName(), field.get(this));
                }
            } catch (IllegalAccessException e) {
                log.error("获取属性map集合失败", e);
                e.printStackTrace();
            }

        }
        return mapToJsonObj(map, new JSONObject());
    }

    /**
     * 判断属性中是否有null值，有则返回true,无则返回false
     * @return
     */
    @Override
    public boolean checkFieldNullValue(){
        List removeProperties=new ArrayList<>();
        removeProperties.add("bmsTrdStrategies");
        removeProperties.add("temperatureRiseWarn");
        removeProperties.add("voltageVariationWarn");
        removeProperties.add("voltageWarn");
        removeProperties.add("temperatureDifferenceWarn");
        removeProperties.add("temperatureWarn");
        removeProperties.add("termalRunawayWarn");
        removeProperties.add("log");
        removeProperties.add("logger");
        Field[] fields = this.getClass().getDeclaredFields();
        try {
            for (Field field:fields) {
                if(!removeProperties.contains(field.getName())){
                    if(Objects.isNull(field.get(this))){
                        return true;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

    private JSONObject mapToJsonObj(Map<String, Object> map, JSONObject resultJson) {
        Iterator it = map.keySet().iterator();
        while (it.hasNext()) {
            String key = (String) it.next();
            resultJson.put(key, map.get(key));
        }
        return resultJson;
    }
}
